home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / intr.arc / INTR.ASM next >
Assembly Source File  |  1986-01-14  |  2KB  |  84 lines

  1. DATA        SEGMENT PUBLIC 'DATA'        
  2.                         ; PUBLIC AND EXTERN DATA
  3.                         ; DECLORATIONS GO HERE
  4. DATA        ENDS
  5. DGROUP        GROUP DATA
  6.         ASSUME CS: INTRS , DS : DGROUP , SS : DGROUP
  7.  
  8. INTRS        SEGMENT 'CODE'
  9. PUBLIC        INTR
  10. INTR        PROC FAR
  11.         PUSH    BP                ; SAVE OLD FRAME POINTER
  12.         MOV    BP,SP                ; GET FRAME POINTER
  13.         PUSH    DS                ; SAVE DATA SEG REG
  14.         PUSH    CS
  15.         POP    DS                ; MAKE THIS CODE ADDRESSABLE
  16.         MOV    AX,10[BP]            ; GET INTERUPT VALUE
  17.         MOV    SI,OFFSET CS:INT_INS+1        ; SET INTERUPT INSTRUCTION
  18.         MOV    CS:[SI],AL
  19.         MOV    SI,6[BP]            ; GET REG PACK OFFSET
  20.         MOV    AX,8[BP]            ; GET REG PACK SEGMENT
  21.         MOV    DS,AX                ; MAKE REG PACK ADDRESSABLE
  22.         MOV    CS:REG_PACK_DS,AX            ; SAVE REG PACK SEG
  23.         MOV    CS:REG_PACK_OFF,SI            ; SAVE REG PACK OFFSET
  24. ;------------------- PUSH USER REGS ------------------------------
  25.         PUSH    12H[SI]
  26.         PUSH    10H[SI]
  27.         PUSH    0EH[SI]
  28.         PUSH    0CH[SI]
  29.         PUSH    0AH[SI]
  30.         PUSH    08H[SI]
  31.         PUSH    06H[SI]
  32.         PUSH    04H[SI]
  33.         PUSH    02H[SI]
  34.         PUSH    [SI]
  35. ;----------------- APPLICATION ----------------------------------------
  36. ;  SET UP REGISTERS AS REQUIRED FOR INTERUPT INSTRUCTION
  37.         POP    AX
  38.         POP    BX
  39.         POP    CX
  40.         POP    DX
  41.         POP    BP
  42.         POP    SI
  43.         POP    DI
  44.         POP    DS
  45.         POP    ES
  46.         POPF
  47. INT_INS:    INT    10H        ; DUMMY INT WILL BE REPLACE WHEN EXECUTED
  48. ; SAVE RETURNED REGISTER VALUES
  49.         PUSHF
  50.         PUSH    ES
  51.         PUSH    DS
  52.         PUSH    DI
  53.         PUSH    SI
  54.         PUSH    BP
  55.         PUSH    DX
  56.         PUSH    CX
  57.         PUSH    BX
  58.         PUSH    AX
  59. ; POP INTERUPT REGISTERS BACK TO THEIR HOME
  60.         PUSH    CS
  61.         POP    DS
  62.         MOV    AX,CS:REG_PACK_DS        ; SAVE REG PACK SEG
  63.         MOV    SI,CS:REG_PACK_OFF        ; SAVE REG PACK OFFSET
  64.         MOV    DS,AX            ; MAKE REG PACK ADDRESSABLE AGAIN
  65.         POP    [SI]
  66.         POP    02H[SI]
  67.         POP    04H[SI]
  68.         POP    06H[SI]
  69.         POP    08H[SI]
  70.         POP    0AH[SI]
  71.         POP    0CH[SI]
  72.         POP    0EH[SI]
  73.         POP    10H[SI]
  74.         POP    12H[SI]
  75. ;----------------- END APP --------------------------------------------
  76.         POP    DS        ; RESTORE OLD DATA SEGMENT
  77.                 POP    BP        ; RESTORE BASE POINTER REGISTER
  78.         RET    6        ; RETURN POP FOUR BYTES
  79. INTR        ENDP
  80. REG_PACK_DS    DW ?
  81. REG_PACK_OFF    DW ?
  82. INTRS        ENDS
  83.         END
  84.